0 PRINT"[147]":POKE53280,0:POKE53281,6 1 PRINT "BROKEN MELODY....":PRINT 2 PRINT "THREE VOICES WAIT FOR USER INPUT BETWEEN PHRASES":PRINT 3 PRINT "USE THIS ROUTINE FOR A SERIES OF REWARDS" 4 REM 5 PRINT "PLAYS I'M ON MY WAY (FROM PAINT YOUR WAGON BY LERNER & LOEWE)" 6 PRINT:PRINT" ONE MOMENT PLEASE..." 10 GOSUB 9000:GOTO 100 60 FOR N=1 TO LEN(MD$(PH)) 61 FOR VC=0 TO EV% 62 POKE GR(VC),UG%(VC):REM NORMAL NOTES; DON'T POKE UG% FOR LEGATO 63 FOR I=0 TO 1 64 POKE FR(VC,I),PI%(ASC(MID$(ME$(PH,VC),N,1)),I) 65 NEXT:NEXT 66 FOR VC=EV% TO 0 STEP -1:POKE GR(VC),G%(VC):NEXT 67 FOR I=0 TO DU%(VAL(MID$(MD$(PH),N,1))):NEXT 68 REM FOR VC=0 TO EV%:POKE GR(VC),UG%(VC):NEXT:REM STACCATO NOTES 69 NEXT:PH=PH+1:IF PH>ES% THEN PH=0 70 FOR VC=0 TO EV%:POKE GR(VC),UG%(VC):NEXT:RETURN 100 PRINT "PRESS SHIFT FOR PHRASE "PH 110 PRINT "ANY OTHER KEY TO STOP" 120 IF PEEK(203)<>64 THEN END 130 IF PEEK(653)=0 THEN 120 140 GOSUB 60 190 GOTO 100 8997 REM 8998 REM SET UP SOUND SHAPE 8999 REM 9000 DIM MD$(23),ME$(23,2),MV$(23,2),G%(2),GR(2),FR(2,1),AD(2) 9001 DIM DU%(9),PI%(168,1),AK%(2),DY%(2),SN%(2),RE%(2),WF%(2) 9007 REM 9008 REM ATTACK--VOICES 0,1,2 9009 REM NUMBER FROM 0 TO 15; LOWER NUMBER=SHARPER ATTACK 9010 AK%(0)=0:AK%(1)=0:AK%(2)=0 9015 FOR I=0 TO 2:AK%(I)=AK%(I)*16:NEXT 9017 REM 9018 REM DECAY--VOICES 0,1,2 9019 REM NUMBER FROM 0 TO 15; LOWER NUMBER=FASTER DECLINE 9020 DY%(0)=7:DY%(1)=3:DY%(2)=3 9027 REM 9028 REM SUSTAIN--VOICES 0,1,2 9029 REM NUMBER FROM 0 TO 15; LOWER NUMBER=SOFTER VOLUME DURING SUSTAIN 9030 SN%(0)=0:SN%(1)=0:SN%(2)=0 9035 FOR I=0 TO 2:SN%(I)=SN%(I)*16:NEXT 9037 REM 9038 REM RELEASE--VOICES 0,1,2 9039 REM NUMBER FROM 0 TO 15; LOWER NUMBER=FASTER DROP TO SILENCE AT END 9040 RE%(0)=0:RE%(1)=3:RE%(2)=5 9047 REM 9048 REM SET SOUND ADDRESSES 9049 REM 9050 FR(0,0)=54272:FR(1,0)=54279:FR(2,0)=54286 9055 FOR I=0 TO 2:FR(I,1)=1+FR(I,0):GR(I)=FR(I,0)+4:AD(I)=GR(I)+1:NEXT 9057 REM 9058 REM POKE ADSR ENVELOPES 9059 REM 9060 FOR I=0 TO 2:POKE AD(I),AT%(I) OR DY%(I) 9065 POKE AD(I)+1,SN%(I) OR RE%(I):NEXT 9066 REM 9067 REM SET UP GATES 9068 REM WAVEFORMS, VOICES 0,1,2 (ADD VALUES): 9069 REM TRIANGLE ON=16; SAWTOOTH ON=32; PULSE ON=64 (SET WIDTH!); NOISE ON=128 9070 WF%(0)=32:WF%(1)=64:WF%(2)=64 9075 FOR I=0 TO 2:G%(I)=1 OR WF%(I):UG%(I)=G%(I)AND 254:NEXT 9077 REM 9078 REM SET PULSE WIDTHS 9079 REM VOICES 0,1,2; LOW BYTE, HIGH BYTE 9080 POKE GR(0)-2,200:POKE GR(0)-1,3 9081 POKE GR(1)-2,200:POKE GR(1)-1,3 9082 POKE GR(2)-2,200:POKE GR(2)-1,3 9096 REM 9097 REM SET UP PITCH ARRAY 9098 REM EACH NOTE, IN ALL ITS OCTAVES 9099 REM C 9100 X%=3:GOSUB 9190 9101 DATA 12,1,24,2,48,4,97,8,195,16,135,33,15,67,30,134 9102 REM D 9103 X%=4:GOSUB 9190 9104 DATA 45,1,90,2,180,4,104,9,209,18,162,37,69,75,139,150 9105 REM E (F-FLAT) 9106 X%=5:GOSUB 9190:Y%=13:GOSUB 9195 9107 DATA 81,1,163,2,71,5,143,10,31,21,62,42,125,84,250,168 9108 REM F (E-SHARP) 9109 X%=6:GOSUB 9190:Y%=19:GOSUB 9195 9110 DATA 102,1,204,2,152,5,48,11,96,22,193,44,131,89,6,179 9111 REM G 9112 X%=7:GOSUB 9190 9113 DATA 145,1,35,3,71,6,143,12,30,25,60,50,121,100,243,200 9114 REM A 9115 X%=1:GOSUB 9190 9116 DATA 195,1,134,3,12,7,24,14,49,28,99,56,199,112,143,225 9117 REM B 9118 X%=2:GOSUB 9190 9119 DATA 250,1,244,3,233,7,210,15,165,31,75,63,151,126,46,253 9120 REM D-FLAT (C-SHARP) 9121 X%=11:GOSUB 9190:Y%=17:GOSUB 9195 9122 DATA 28,1,56,2,112,4,225,8,195,17,134,35,12,71,24,142 9123 REM E-FLAT (D-SHARP) 9124 X%=12:GOSUB 9190:Y%=18:GOSUB 9195 9125 DATA 62,1,125,2,251,4,247,9,239,19,223,39,191,79,126,159 9126 REM G-FLAT (F-SHARP) 9127 X%=14:GOSUB 9190:Y%=20:GOSUB 9195 9128 DATA 123,1,246,2,237,5,218,11,181,23,107,47,214,94,172,189 9129 REM A-FLAT (G-SHARP) 9130 X%=8:GOSUB 9190:Y%=21:GOSUB 9195 9131 DATA 169,1,83,3,167,6,78,13,156,26,57,53,115,106,230,212 9132 REM B-FLAT (A-SHARP) 9133 X%=9:GOSUB 9190:Y%=15:GOSUB 9195 9134 DATA 221,1,187,3,119,7,239,14,223,29,190,59,124,119,248,238 9135 REM C-FLAT 9136 X%=10:GOSUB 9190 9137 DATA 4,1,250,1,244,3,233,7,210,15,165,31,75,63,151,126 9138 REM B-SHARP 9139 X%=16:GOSUB 9190 9140 DATA 24,2,48,4,97,8,195,16,135,33,15,67,30,134,255,255 9185 GOTO 9200 9189 REM READ PITCHES 9190 FOR I=0 TO 147 STEP 21:READ PI%(I+X%,0),PI%(I+X%,1):NEXT:RETURN 9194 REM IDENTICAL PITCHES 9195 FOR I=0 TO 147 STEP 21:PI%(I+Y%,0)=PI%(I+X%,0):PI%(I+Y%,1)=PI%(I+X%,1) 9196 NEXT:RETURN 9197 REM 9198 REM SET UP DURATIONS 9199 REM 9200 FOR I=0 TO 9:READ DU%(I):NEXT 9205 DATA 10,128,256,384,512,640,768,1024,1152,1280 9296 REM 9297 REM SET FILTER AND VOLUME 9298 REM FILTER FREQUENCY 9299 REM LOW BYTE (0-7) X%; HIGH BYTE (0-255) Y% 9300 X%=0:Y%=100 9305 POKE 54293,X%:POKE 54294,Y% 9308 REM FILTER ON? 9309 REM VOICE 1 ON=1; 2 ON=2; 3 ON=4; 1&2 ON=3; 2&3 ON=6; ALL ON=7 9310 X%=0 9318 REM FILTER RESONANCE 9319 REM PEAK VOLUME (0=LOW, 15=HIGH) 9320 Y%=14 9325 Y%=Y%*16:POKE 54295,X% OR Y% 9328 REM SELECT FILTER TYPE 9329 REM LOW-PASS=1;BAND-PASS=2;HIGH-PASS=4;LO-BAND=3;HI-BAND=6;ALL=7 9330 X%=1 9335 X%=X%*16 9337 REM 9338 REM SELECT OVERALL VOLUME 9339 REM 15=HIGH, 0=LOW 9340 Y%=15 9345 POKE 54296,X% OR Y% 9496 REM 9497 REM SET MELODIES HERE 9498 REM 9499 REM HOW MANY VOICES? (MINUS ONE) 9500 EV%=2 9508 REM 9509 REM HOW MANY PHRASES? (MINUS ONE) 9510 ES%=8 9514 REM 9515 REM MELODY STRINGS 9516 REM 9517 REM EACH PHRASE HAS ONLY ONE DU%(PH) STRING, NO MATTER HOW MANY VOICES 9518 REM EACH PHRASE HAS ONE ME$(PH,VC) & ONE MV$(PH,VC) STRING PER VOICE 9519 REM PHRASE 0 9520 MD$(0)="0000000000000000" 9521 ME$(0,0)="FFFGAFG@FFFGAFGE" 9522 MV$(0,0)="6 " 9523 ME$(0,1)="CCDCGDCCCCDCGDCC" 9524 MV$(0,1)="4545354545453545" 9525 ME$(0,2)="FAEAGBC[191]FADAGBC[191]" 9526 MV$(0,2)="3434343434343434" 9529 REM PHRASE 1 9530 MD$(1)="0000000000000000" 9531 ME$(1,0)="FFFGAFGEF@@@@@@@" 9532 MV$(1,0)="6 " 9533 ME$(1,1)="FCECDBCCFCECDACA" 9534 MV$(1,1)="45454 545454 5" 9535 ME$(1,2)="FAEADBC[191]FAEADFCF" 9536 MV$(1,2)="3434343434343435" 9539 REM PHRASE 2 9540 MD$(2)="0000000000000000" 9541 ME$(2,0)="[191][191][191]CD[191]C@[191][191][191]CD[191]CA" 9542 MV$(2,0)="6 7 67 6 7 676" 9543 ME$(2,1)="@F@FCGFF@F@FCGFF" 9544 MV$(2,1)=" 5 4545 4545" 9545 ME$(2,2)="[191]DGDCEF[177][191]DGDCEF[177]" 9546 MV$(2,2)="3535353535353535" 9549 REM PHRASE 3 9550 MD$(3)="00000000000000" 9551 ME$(3,0)="[191][191][191]CD[191]CA[191]@@@@@" 9552 MV$(3,0)="6 7 676 " 9553 ME$(3,1)="[191]FAFGEFF[191]FAFGF" 9554 MV$(3,1)="45454545454545" 9555 ME$(3,2)="[191]DADGCF[177][191]DADGD" 9556 MV$(3,2)="35353535353535" 9559 REM PHRASE 4 9560 MD$(4)="0000000000000000" 9561 ME$(4,0)="F[191]C@C@@@D[191]C@@@@@" 9562 MV$(4,0)="6 7 67 " 9563 ME$(4,1)="FFFAG[191]AADGFAG[191]AA" 9564 MV$(4,1)="45454545 4 54545" 9565 ME$(4,2)="FDFFGEAF[191]FFFGEAF" 9566 MV$(4,2)="3535353534353535" 9569 REM PHRASE 5 9570 MD$(5)="000000000000000000" 9571 ME$(5,0)="CFG@G@@GAFG@@@@@@@" 9572 MV$(5,0)="6 " 9573 ME$(5,1)="@BGEGFGE@BFECCAFGC" 9574 MV$(5,1)=" 4 54545 4 5453 " 9575 ME$(5,2)="@AECDBECGACFC[191]AFGF" 9576 MV$(5,2)=" 4 54 534343 2 1" 9579 REM PHRASE 6 9580 MD$(6)="0000000000000000" 9581 ME$(6,0)="FFFGAFG@FFFGAFGE" 9582 MV$(6,0)="6 " 9583 ME$(6,1)="CCDCGDCCCCDCGDCC" 9584 MV$(6,1)="4545354545453545" 9585 ME$(6,2)="FAEAGBC[191]FADAGBC[191]" 9586 MV$(6,2)="3434343434343434" 9589 REM PHRASE 7 9590 MD$(7)="000000000000000" 9591 ME$(7,0)="FFFGAFGEC@@@C@@" 9592 MV$(7,0)="6 7 " 9593 ME$(7,1)="FCECDBCC@A@[191]CF@" 9594 MV$(7,1)="45454 5 4 5 " 9595 ME$(7,2)="FAEADBC[191]FFGRA[177]@" 9596 MV$(7,2)="34343434343435 " 9599 REM PHRASE 8 9600 MD$(8)="00000000000000000" 9601 ME$(8,0)="DC@C[191]AFGDF@@@F@@@" 9602 MV$(8,0)="7 6 7 " 9603 ME$(8,1)="[191]CACA@C@CFDC[191]A@F@" 9604 MV$(8,1)="5 46 5 4 " 9605 ME$(8,2)="DCFCFCAC[191]F[191]AGF@F@" 9606 MV$(8,2)="545354 3435 3 " 9897 REM 9898 REM CONVERT STRINGS TO USABLE FORM 9899 REM 9900 FOR PH=0 TO ES%:FOR VC=0 TO EV% 9905 A$=ME$(PH,VC):ME$(PH,VC)="" 9910 FOR I=1 TO LEN(A$) 9920 X%=ASC(MID$(A$,I,1)) 9930 IF X%<72 THEN X%=X%-64:IF X%<0 THEN X%=0 9931 IF X%>192AND X%<200 THEN X%=X%-178 9932 IF X%=176 THEN X%=8 9933 IF X%=191 THEN X%=9 9934 IF X%=188 THEN X%=10 9935 IF X%=172 THEN X%=11 9936 IF X%=177 THEN X%=12 9937 IF X%=187 THEN X%=13 9938 IF X%=165 THEN X%=14 9939 IF X%>21 THEN X%=0 9950 V$=MID$(MV$(PH,VC),I,1):IF V$<>" " THEN Y%=21*VAL(V$) 9960 IF X%<>0 THEN X%=X%+Y% 9970 ME$(PH,VC)=ME$(PH,VC)+CHR$(X%) 9975 NEXT:NEXT:NEXT 9980 PH=0 9990 RETURN